/**
 * Copyright (c) 2011-2014, James Zhan 詹波 (jfinal@126.com).
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 */

package com.outsider.weixin.controller;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

import com.jfinal.config.*;
import com.jfinal.core.JFinal;
import com.jfinal.kit.PathKit;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.c3p0.C3p0Plugin;
import com.jfinal.weixin.sdk.api.ApiConfig;
import com.jfinal.weixin.sdk.api.ApiConfigKit;
import com.outsider.note.controller.TextNoteController;
import com.outsider.product.controller.ProductController;
import com.outsider.thunder.controller.ThunderController;
import com.outsider.thunder.dao.TaskBase;
import com.outsider.util.AcfunUtil;
import com.outsider.util.ScheduleUtil;
import com.outsider.util.thunder.Thunder;
import com.outsider.weixin.dao._MappingKit;



public class WeixinConfig extends JFinalConfig {

	/**
	 * 如果生产环境配置文件存在，则优先加载该配置，否则加载开发环境配置文件
	 * 
	 * @param pro
	 *            生产环境配置文件
	 * @param dev
	 *            开发环境配置文件
	 */
	public void loadProp(String pro, String dev) {
		try {
			PropKit.use(pro);
		} catch (Exception e) {
			PropKit.use(dev);
		}
	}

	public void configConstant(Constants me) {
		loadProp("Config_pro.txt", "Config.txt");
		me.setDevMode(PropKit.getBoolean("devMode", false));
		// ApiConfigKit 设为开发模式可以在开发阶段输出请求交互的 xml 与 json 数据
		ApiConfigKit.setDevMode(me.getDevMode());
	}

	public void configRoute(Routes me) {
		me.add("/msg", MyMsgController.class);
		me.add("/api", MyApiController.class, "/api");
		me.add("/textNote",TextNoteController.class);
		me.add("/thunder",ThunderController.class);
		me.add("/product",ProductController.class);
	}

	public void configPlugin(Plugins me) {
		C3p0Plugin c3p0Plugin = new C3p0Plugin("jdbc:mysql://127.0.0.1/outsider?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull", PropKit.get("mysql.user"),
				PropKit.get("mysql.password").trim());

		
		// 配置ActiveRecord插件
		ActiveRecordPlugin arp = new ActiveRecordPlugin("mysql",c3p0Plugin);
		_MappingKit.mapping(arp);
		me.add(c3p0Plugin);
		me.add(arp);
		
		
	    C3p0Plugin c3p0Plugin2=new C3p0Plugin(PropKit.get("sqlite.jdbcUrl"), null, null);
	    c3p0Plugin2.setDriverClass("org.sqlite.JDBC");
		ActiveRecordPlugin arp2=new ActiveRecordPlugin("sqlite", c3p0Plugin2);
		arp2.addMapping("TaskBase", "taskid", TaskBase.class);
		me.add(c3p0Plugin2);
		me.add(arp2);		

		System.out.println(PathKit.getWebRootPath());
		
	}

	public void configInterceptor(Interceptors me) {
		// 设置默认的 appId 规则，默认值为appId，可采用url挂参数 ?appId=xxx 切换多公众号
		// ApiInterceptor.setAppIdParser(new
		// AppIdParser.DefaultParameterAppIdParser("appId")); 默认无需设置
		// MsgInterceptor.setAppIdParser(new
		// AppIdParser.DefaultParameterAppIdParser("appId")); 默认无需设置
	}

	public void configHandler(Handlers me) {

	}

	public void afterJFinalStart() {
		// 1.5 之后支持redis存储access_token、js_ticket，需要先启动RedisPlugin
		// ApiConfigKit.setAccessTokenCache(new RedisAccessTokenCache());
		// 1.6新增的2种初始化
		// ApiConfigKit.setAccessTokenCache(new
		// RedisAccessTokenCache(Redis.use("weixin")));
		// ApiConfigKit.setAccessTokenCache(new
		// RedisAccessTokenCache("weixin"));

		ApiConfig ac = new ApiConfig();
		// 配置微信 API 相关参数
		ac.setToken(PropKit.get("token"));
		ac.setAppId(PropKit.get("appId"));
		ac.setAppSecret(PropKit.get("appSecret"));

		/**
		 * 是否对消息进行加密，对应于微信平台的消息加解密方式： 1：true进行加密且必须配置 encodingAesKey
		 * 2：false采用明文模式，同时也支持混合模式
		 */
		ac.setEncryptMessage(PropKit.getBoolean("encryptMessage", false));
		ac.setEncodingAesKey(PropKit.get("encodingAesKey", "setting it in config file"));

		/**
		 * 多个公众号时，重复调用ApiConfigKit.putApiConfig(ac)依次添加即可，第一个添加的是默认。
		 */
		ApiConfigKit.putApiConfig(ac);

		// 微信 WxSession的配置
		// 启用默认的Session管理器
		ApiConfigKit.enableDefaultWxSessionManager();
		// 启用redis Session管理器
		// ApiConfigKit.setWxSessionManager(new
		// RedisWxSessionManager("weixin"));
		
		//设置Note与news定时线程池
		ScheduleUtil sc=ScheduleUtil.getScheduleUtil();
		//生成python的配置文件
        File file=new File(WeixinConfig.class.getResource("/").getPath()+"\\com\\outsider\\product\\dao\\python\\pyConfig.txt");

        
		try {
	        OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(file),"UTF-8");
	        out.write("[py]\r\n");
	        out.write("pictureLoc="+PathKit.getWebRootPath()+"\\product\\picture\\");
	        out.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        Thunder.getInstance();

	}

	public static void main(String[] args) {
		JFinal.start("src/main/webapp", 80, "/", 5);
	}
}
